package tk.mynoteapp.dev.demo22.apiversion;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RequestMapping("apiversion")
@RestController
public class APIVersionController {

    @GetMapping("/api/item/v1")
    public void wrong1() {

    }

    @GetMapping("/api/v1/shop")
    public void wrong2() {

    }

    @GetMapping("/v1/api/merchant")
    public void wrong3() {

    }

    // 通过URL Path实现版本控制（推荐，最直观不容易出错，必须统一规定好版本实现方法）
    @GetMapping("/v1/api/user")
    public int right1() {
        return 1;
    }

    // 通过QueryString中的version参数实现版本控制（不推荐作为公开API的版本策略）
    @GetMapping(value = "/api/user", params = "version=2")
    public int right2(@RequestParam("version") int version) {
        return 2;
    }

    // 通过请求头中的X-API-VERSION参数实现版本控制（适用于接口对数量不太多的项目进行版本控制）
    @GetMapping(value = "/api/user", headers = "X-API-VERSION=3")
    public int right3(@RequestHeader("X-API-VERSION") int version) {
        return 2;
    }

    @GetMapping(value = "/api/user")
    @APIVersion("v4")
    public int right4() {
        return 4;
    }
}
